import { watch } from "vue";
import { useStoreStore } from "@/store/modules/store";

/**
 * 页面刷新管理器
 * 用于管理所有页面在店铺切换时的自动刷新
 */
class PageRefreshManager {
  constructor() {
    this.callbacks = new Map(); // 存储页面路径和刷新回调的映射
    this.currentRoute = ""; // 当前页面路径
    this.isWatching = false; // 是否已经开始监听
    this.lastStoreId = null; // 上次的店铺ID
  }

  /**
   * 初始化监听（只需要在 App.vue 中调用一次）
   */
  init() {
    if (this.isWatching) return;

    const storeStore = useStoreStore();
    this.lastStoreId = storeStore.storeId;

    // 监听店铺ID变化
    watch(
      () => storeStore.storeId,
      (newStoreId, oldStoreId) => {
        console.log(
          `[PageRefreshManager] 店铺ID变化：${oldStoreId} -> ${newStoreId}`,
        );

        if (newStoreId && newStoreId !== this.lastStoreId) {
          this.lastStoreId = newStoreId;
          this.refreshCurrentPage("店铺切换");
        }
      },
    );

    this.isWatching = true;
    console.log("[PageRefreshManager] 初始化完成");
  }

  /**
   * 注册页面刷新回调
   * @param {String} route - 页面路径
   * @param {Function} callback - 刷新回调函数
   */
  register(route, callback) {
    console.log(`[PageRefreshManager] 注册页面：${route}`);
    this.callbacks.set(route, callback);
  }

  /**
   * 注销页面刷新回调
   * @param {String} route - 页面路径
   */
  unregister(route) {
    console.log(`[PageRefreshManager] 注销页面：${route}`);
    this.callbacks.delete(route);
  }

  /**
   * 设置当前页面路径
   * @param {String} route - 页面路径
   */
  setCurrentRoute(route) {
    this.currentRoute = route;
    console.log(`[PageRefreshManager] 当前页面：${route}`);
  }

  /**
   * 刷新当前页面
   * @param {String} source - 刷新来源
   */
  refreshCurrentPage(source = "未知") {
    if (!this.currentRoute) {
      console.warn("[PageRefreshManager] 当前页面路径为空，跳过刷新");
      return;
    }

    const callback = this.callbacks.get(this.currentRoute);
    if (callback && typeof callback === "function") {
      console.log(
        `[PageRefreshManager] 刷新页面：${this.currentRoute}，来源：${source}`,
      );
      try {
        callback();
      } catch (error) {
        console.error(
          `[PageRefreshManager] 刷新页面失败：${this.currentRoute}`,
          error,
        );
      }
    } else {
      console.log(
        `[PageRefreshManager] 页面 ${this.currentRoute} 未注册刷新回调`,
      );
    }
  }

  /**
   * 刷新指定页面
   * @param {String} route - 页面路径
   * @param {String} source - 刷新来源
   */
  refreshPage(route, source = "手动刷新") {
    const callback = this.callbacks.get(route);
    if (callback && typeof callback === "function") {
      console.log(`[PageRefreshManager] 刷新页面：${route}，来源：${source}`);
      try {
        callback();
      } catch (error) {
        console.error(`[PageRefreshManager] 刷新页面失败：${route}`, error);
      }
    }
  }

  /**
   * 刷新所有已注册的页面
   * @param {String} source - 刷新来源
   */
  refreshAllPages(source = "全局刷新") {
    console.log(`[PageRefreshManager] 刷新所有页面，来源：${source}`);
    this.callbacks.forEach((callback, route) => {
      try {
        callback();
      } catch (error) {
        console.error(`[PageRefreshManager] 刷新页面失败：${route}`, error);
      }
    });
  }

  /**
   * 获取所有已注册的页面
   */
  getRegisteredPages() {
    return Array.from(this.callbacks.keys());
  }

  /**
   * 清空所有注册
   */
  clear() {
    console.log("[PageRefreshManager] 清空所有注册");
    this.callbacks.clear();
  }
}

// 导出单例
export const pageRefreshManager = new PageRefreshManager();

// 导出便捷方法
export default pageRefreshManager;

